# -*- coding: utf-8 -*-
"""
Created on Thu Jul 11 21:11:26 2024

@author: LoongFly
"""

# 只显示右边界
'''
import cv2
import numpy as np
img_input = cv2.imread("H:\\PycharmProjects\\OpenCV\\A4_ImageGradient\\egde.png", cv2.IMREAD_UNCHANGED)
sobelx = cv2.Sobel(img_input, -1, 1, 0)     #计算x方向上的梯度

cv2.imshow("Original", img_input)   #显示原始图像
cv2.imshow("Blackhat", sobelx)      #显示右边界图像

cv2.waitKey()
cv2.destroyAllWindows()
'''


'''
# 显示左右边界
import cv2
import numpy as np
img_input = cv2.imread("H:\\PycharmProjects\\OpenCV\\A4_ImageGradient\\egde.png", cv2.IMREAD_UNCHANGED)
sobelx = cv2.Sobel(img_input, cv2.CV_64F, 1, 0)     #计算x方向上的梯度
sobelx = cv2.convertScaleAbs(sobelx)                #将梯度转换为无符号8位整数

cv2.imshow("Original", img_input)   #显示原始图像
cv2.imshow("Blackhat", sobelx)      #显示右边界图像

cv2.waitKey()
cv2.destroyAllWindows()
'''



# 显示左右边界

import cv2
import numpy as np
img_input = cv2.imread("H:\\PycharmProjects\\OpenCV\\A4_ImageGradient\\egde.png", cv2.IMREAD_UNCHANGED)

img_input = cv2.imread("H:\\PycharmProjects\\OpenCV\\A3_Morphology\\photo\\lena.png", cv2.IMREAD_UNCHANGED)


sobelx = cv2.Sobel(img_input, cv2.CV_64F, 1, 0)     #计算x方向上的梯度
sobely = cv2.Sobel(img_input, cv2.CV_64F, 0, 1)     #计算y方向上的梯度
sobelx = cv2.convertScaleAbs(sobelx)                #将梯度转换为无符号8位整数 处理绝对值，两个边界都取出来
sobely = cv2.convertScaleAbs(sobely)                #将梯度转换为无符号8位整数
sobelxy = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)   #将x方向和y方向上的梯度叠加

sobelxy11 = cv2.Sobel(img_input, cv2.CV_64F, 1, 1)     #计算xy方向上的梯度
sobelxy11 = cv2.convertScaleAbs(sobelxy11)                #将梯度转换为无符号8位整数

cv2.imshow("Original", img_input)   #显示原始图像
cv2.imshow("shuiping", sobelx)      #显示右边界图像
cv2.imshow("chuizhi", sobely)       #显示左边界图像
cv2.imshow("zhengti", sobelxy)      #显示整体边界图像，xy求和
cv2.imshow("direction", sobelxy11)      #直接求的边界，不理想的图像

cv2.waitKey()
cv2.destroyAllWindows()



#效果不好的，不要直接用 cv2.Sobel(img_input, cv2.CV_64F, 1, 1)
'''
import cv2
import numpy as np
img_input = cv2.imread("H:\\PycharmProjects\\OpenCV\\A4_ImageGradient\\egde.png", cv2.IMREAD_UNCHANGED)
sobelxy11 = cv2.Sobel(img_input, cv2.CV_64F, 1, 1)     #计算xy方向上的梯度
sobelxy11 = cv2.convertScaleAbs(sobelxy11)                #将梯度转换为无符号8位整数

cv2.imshow("Original", img_input)   #显示原始图像
cv2.imshow("zhengti", sobelxy11)      #显示整体边界图像

cv2.waitKey()
cv2.destroyAllWindows()
'''